Módulo 3 - Visualizaciones básicas en ggplot2
2024 -Módulo 3
Importancia de la visualización
Porqué y para qué visualizar.
Gramática de gráficos y conexión con ggplot2
Definición de gráfico estadístico, usando la GG.
¿Porqué usar ggplot2?
Veremos: Visualizaciones básicas con ggplot2 y uso de scales
La gramática gráfica responde las siguientes preguntas:
¿Qué es un gráfico estadístico
¿Cómo describir un gráfico?
¿Cómo crear un gráfico?
Un gráfico estadístico es un mapeo de los datos a atributos estéticos (ejem: color, forma, tamaño) de objetos geométricos (ejem: puntos, lineas, barras)
ggplot2 Paquete con un sustento teórico basado en la gramática gráfica.
Define la GGC (gramática gráfica en capas)
ggplot2 Componentes en gráficos con ggplot2:
data: datos a visualizar
aes: un conjunto de mapeos estéticos entre las variables en los datos y las propiedades visuales (ejem: color, tamaño).
layer: al menos una capa que describe como representar cada observación. Las capas son creadas con la función geom.
La visualización de datos se basa en los datos, resumir información.
Hay diferentes tipos de visualización para enfatizar en distintos aspectos de los datos.
Los datos contienen observaciones y variables, en una forma tabular ordenada las observaciones están en las filas, las variables en las columnas y en cada celda tenemos un único valor
ggplot2 aes())Libro “Fundamentals of Data visualization” link (Wilke 2019)
¿Cuáles son las visualizaciones más importantes?
Imposible de responder, pero algunos de ellos son:
Histogramas, gráfico de densidades, barras, de series de tiempo (todos en una dimensión )
Diagrama de dispersión, gráfico de caja lado a lado (2-dim), gráfico de coordenaddas paralelas, mosaico (dos dimensiones o más)
Mapas (información geográfica)
y más…
Diferentes tipos de visualizaciones debido al tipo diferente de variables.
Énfasis: cada gráfico puede mostrar un aspecto diferente de los datos.
Punto clave para hacer visualización: entender el tipo de variable que tenemos
Variable Continua: una variables con infinitos números de valores, como tiempo, peso.
Variable Discreta: variables numéricas que puede tomar un cierto número de valores. Ejemplo, “número de estudiantes en la clase”
Variable Categórica: variables que pueden ser definidas como grupos o categorías (color de pelo, nivel educativo, etc)
y más…
No hay reglas claras para hacer EDA (análisis exploratorio de datos) pero podemos empezar por algunas preguntas básicas:
¿Cuál es la variabilidad de cierta variable?
¿Cuál es la distribución de mis datos?
¿Hay alguna relación entre alguna de las variables seleccionadas?
¿Como covarian estas dos variables?
Para identificar que herramientas usar en EDA deberíamos identificar que tipo de variables a analizar
Ejemplo:
Variables Categóricas, nosotros podemos analizar la distribución usando un gráfico de barras.
Variables continuas, podemos analizar la distribución usando un histograma.
Histograma, gráfico de densidades, diagrama de puntos movidos y gráfico de caja
Cada gráfico enfatiza algo distinto de los datos: asimetría, modalidad, simetría, brechas, atípicos
No hay un gráfico correcto, todos son útiles en algún sentido
Covariación es la tendencia de variación conjunta para los valores de dos o más variables.
La mejor forma de detectar la covariación es visualizar la relación entre dos o más variables.
El tipo de variables es lo que va a definir como visualizar la covariación.
Es común explorar la distibución de una variable continua de acuerdo a una variable categórica
Histogramas (geom_histogram()) o densidades (geom_density()) coloreadas por una variable categórica para comparar la distribuciones para cada categoría
Gráfico de caja:
Vemos la distribución de los datos para variables continuas
Basado en las 5 medidas de resumen (min, Q1, Q2, Q3, max).
Atípicos ( \(Q1–1.5*IQR\) y \(Q3 + 1.5*IQR\))
Violín: es una combinación entre el gráfico de cajas y el de densidades
–
# A tibble: 6 × 7
total propina sexo fuma dia momento cantidad
<dbl> <dbl> <chr> <chr> <chr> <chr> <dbl>
1 17.0 1.01 F No Do Noche 2
2 10.3 1.66 M No Do Noche 3
3 21.0 3.5 M No Do Noche 3
4 23.7 3.31 M No Do Noche 2
5 24.6 3.61 F No Do Noche 4
6 25.3 4.71 M No Do Noche 4
geom_point().aspect.ratio es el ratio entre el ancho y el alto
pp + geom_point()p + geom_boxplot()p + geom_violin()Información a mostrar el conteo de observaciones para cada combinación
podemos usar geom_count(), geom_tile(), geom_bar() ….
geom_count() es una variante de geom_point().
Cuenta el número de observaciones en cada combinación y mapea el conteo en la correspondiente posición.
geom_tile() cada combinación de variables es pintada con un color que representa un valor de otra variable en escala continua de color.
Por defecto el más claro representa mayor cantidad.
geom_bar() sirve para describir la distribución de variables categóricas, para cada categoría la altura de la barra es proporcional al número de caso en cada grupo. Se puede representar alternativamente en terminos de proporción o porcentaje.
Si queremos representar más de una variable categórica usamos gráficos de barras apilados (stacked bar graph).
geom_bar()
Gráficos de barras apilados simples: pone los valores en segmentos uno atrás de otro para cada categoría. El valor total de una barra es la suma de todos los segmentos. Sirve para comparar el monto total para cada categoría.
Gráficos de barras apilados 100%: muestra el porcentaje para cada categoría al interior de un grupo. Esto hace más sencillo de ver las diferencias relativas entre grupos.
p + geom_bar()p + geom_bar(position="stack")p + geom_bar(position="dodge")p + geom_bar(position="fill")Los datos hay que convertirlos desde unidades datos (moneda, sexo, etc) a unidades gráficas, aes (color,forma, etc) que se pueden representar en la computadora.
La conversión es llamada escalado y es realizada por scales
Los scales controlan el mapeo de los datos a los atributos estéticos (aes)
Necesitamos un scale para cada aes y cada scale opera para todos los datos en el gráfico que permite un mapeo consistente entre los datos a los aes
Estas especificaciones estéticas que tienen sentido para R se describen en vignette("ggplot2-specs") link
Mapeo estético (aes) solamente dice que una variable debe ser mapeada a un elemento estético pero no dice cómo debe ser.
Cuando mapeo una variable a shape usando aes(shape = x) no especifico la forma (shape) particular que debe tomar, se usa la de defecto.
Cuando uso aes(color = z) no digo de que color debe ser
Describir el color, la forma, el tamaño etc (color, shape, size) a usar se hace mediante transformaciones en scale
x e ycolor y fillsizeshapelinetypeLas scales se modifican con una serie de funciones con el siguiente esquema de nombrado scale_<aesthetic>_<type>. Mirar scale_<tab> ver la lista de las funciones de scale.
ejemplo: scale_color_manual para cambiar el color de forma manual
scales disponiblesEquivalente a:
Cambio los límites del eje x y valores que se incluyen:
Cada observación representada como un punto cuya posición está de acuerdo a dos variables (posición horizontal y vertical)
Cada punto tiene tamaño, color y forma estos atributos son llamados elementos estéticos (inglés aesthetics aes )
Los aes son propiedades que pueden ser percibidas en el gráfico cada aes puede ser mapeado a una variable o fijado en un valor constante
total es mapeado a la posición horizontal, propina a la posición vertical y fuma al color. Tamaño y forma no son mapeados a variables (valor por defecto)
# A tibble: 3 × 3
total propina fuma
<dbl> <dbl> <chr>
1 17.0 1.01 No
2 10.3 1.66 No
3 21.0 3.5 No
| x | y | colour |
|---|---|---|
| 17.0 | 1.01 | No |
| 10.3 | 1.66 | No |
| 21.0 | 3.5 | No |
Los datos, mapeos estéticos, objetos geométricos y las transformaciones estadísticas forman una capa
Podemos tener un gráfico con muchas capas
La gramática de capas define componentes de un gráfico:
datos y conjunto de mapeos de variables a elementos estéticos
una o más capas, cada capa tiene un elemento geométrico, una transformación estadística, una posición y opcional datos y aes
Equivalente a :
stat: es el nombre de la transformación estadística a utilizar. Para que los datos sean usados como están sin transformar se usa stat ='identity'. Más info https://rpubs.com/hadley/ggplot2-layers
position: el método usado para ajustar sobreploteo.Más info https://rpubs.com/hadley/ggplot2-layers
Varios conjuntos de datos:
Si hay más de un conjunto de datos en el gráfico poner los datos en la capa que corresponda ser utilizados.
Si pongo los datos al inicio ggplot(data = propina) esos datos son usados en todas las capas
Si tengo una única capa la forma de especificar los aes no hace la diferencia pero si agrego capas hay diferencias según en que capa especifico el aes
Cuando substituimos geom_pont() por otro geom obtenemos un gráfico distinto. Los geom más comunes:
geom_smooth()geom_boxplot()geom_histogram()geom_bar()geom_path() y geom_lines()cada geom_ tiene asociados elementos estéticos particulares
Sobrescribe el scale si aplico dos veces el mismo
El color es un elemento estético clave para visualización de datos
No es trivial
Hay que tomar en cuenta:
daltonimso, si es para imprimir o no…
si hay o no elementos a resaltar
el tipo de variables que voy a colorear
Tres usos fundamentales del color:
Para distinguir grupos entre si (productos, grupos de clientes, etc).
Para representar valores de los datos (ventas, stock, tiempo, etc).
Para resaltar algo.
Uso una escala de colores cualitativa, debería satisfacer :
Los colores deben ser claramente distintos unos de otros.
Ninguno de los colores debería sobresalir relativo al resto.
Los colores no deberían crear la impresión de que hay un orden.
Uso escala de colores secuencial, debería satisfacer:
Secuencia de colores que claramente indica que valores son mayores o menores que otros y cuán distintos son dos valores específicos entre si.
La escala necesita ser percibida como que varía uniformemente a través de su rango de valores.
Escalas secuenciales deben basarse en una sola tonalidad (de gris oscuro a gris claro) or o múltiples tonalidades (de rojo oscuro a amarillo claro)
La usamos cuando necesito visualizar la desviación de los valores en mis datos en una de dos direcciones relativa a un punto medio neutral.
Para reslatar elementos específicos en los datos.
Una forma de enfatizar elementos relevantes en una figura para los lectores puede ser usando una escala de colores acentuada
Es común el uso de la codificación de colores en la escala RGB (rojo, verde y azul).
Esta escala tiene el problema de que no es uniforme desde el punto e vista de la percepción.
La escala RGB hace difícil crear un mapeo de colores para una variable continua.
Otra aproximación es usar el espacio de colores HCL que tiene tres componentes (Hue, chroma y luminicence).
Tono (Hue) va desde 0 a 360 y define el color (rojo, verde….)
Croma (Chroma) es la pureza del color y va e 0 (gris) al máximo que varía con la luminosidad.
Luminosidad (Luminance) es la luminosidad del color, va de 0 (negro) a 1 (blanco)
Hay muchas formas de especificar escalas de colores continuas
ggplot2 permite seleccionar dos paletas mediante dos funciones scale
scale_fill_viridis_c() y scale_fill_distiller()
scale_fill_viridis_c() diseñada para ser percibida como uniforme tanto en color como blanco y negro.
scale_fill_distiller() derivada de ColorBrewer donde vimos que scale_color_brewer() nos da los colores como paletas discretas
Como hay muchas paletas en R hay un paquete paletteer que incluye muchas de ellas. Se identifica el nombre del paquete y la paleta separada por ::
palettes_c_names contienen la información de los paquetes, paletas y tipo
# A tibble: 8 × 3
package palette type
<chr> <chr> <chr>
1 viridis viridis sequential
2 viridis inferno sequential
3 viridis magma sequential
4 viridis plasma sequential
5 viridis cividis sequential
6 viridis rocket sequential
7 viridis turbo sequential
8 viridis mako sequential
Por defecto la scale para color o fill continuo es scale_color_continous() o scale_fill_continous()
son equivalentes a usar scale_color_gradient() o scale_fill_gradient()
Las escalas con gradiente da una forma robusta de crear cualquier color, hay que especificar 2 o más colores de referencia y ggplot2 interpola linealmente entre ellos.
Tres funciones :scale_fill_gradient() (gradiente con dos colores), scale_fill_gradient2() (gradiente con tres colores donde se especifica el punto medio) scale_fill_gradientn() un gradiente con n colores.
Material del curso está bajo licencia Creative Commons BY-NC-SA 3.0